#ifndef  HELPER_OBJECT_POINTER_H
#define  HELPER_OBJECT_POINTER_H

#include "helper/object/Object.h"

namespace helper {
namespace object {

class Pointer : public Object {
public:
    Pointer() : Object(Object::POINTER) {}
    ~Pointer() override {}

    virtual void * set(const void * value) = 0;
    virtual const void * get() const = 0;
    virtual void * get()  = 0;

    bool operator ==(const Pointer & right) const {
        return equals(right);
    }
    bool operator !=(const Pointer & right) const{
        return !(*this == right);
    }
    bool operator ==(const void * right) const {
        return get() == right;
    }
    bool operator !=(const void * right) const{
        return !(*this == right);
    }
};
bool operator ==(const void * left, const Pointer & right) ;
bool operator !=(const void * left, const Pointer & right) ;


} // end of namespace object
} // end of namespace helper

#endif   /* HELPER_OBJECT_POINTER_H */
